package com.zhu.config;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.concurrent.TimeUnit;

@Component
public class GuavaCacheManager<K, V> {
    private Cache<K, V> cache;

    @PostConstruct
    public void init() {
        // 创建 Guava 缓存
        cache = CacheBuilder.newBuilder()
                .maximumSize(1000) // 设置最大缓存大小
                .expireAfterWrite(60*24*10, TimeUnit.MINUTES) // 设置写入后过期时间
                .build();
    }

    // 添加缓存项
    public void put(K key, V value) {
        cache.put(key, value);
    }

    // 获取缓存项
    public V get(K key) {
        return cache.getIfPresent(key);
    }

    // 清除缓存项
    public void invalidate(K key) {
        cache.invalidate(key);
    }

    // 清空缓存
    public void invalidateAll() {
        cache.invalidateAll();
    }

    // 获取缓存大小
    public long size() {
        return cache.size();
    }

    @PreDestroy
    public void cleanup() {
        // 清理资源（如果需要）
        invalidateAll();
    }
}

